正所謂安內才能攘外,鞏固好SQL資料庫禁區的防守後,接下來我們往外移動一點腳步來盯人防守,為了避免SQL Server與AP Server間傳輸使用的TDS(Tabular Data Stream)表格式資料封包被攔截,也許我們可以讓傳輸的通道也是加密的,來試試盯人SSL防守。
從PCI DSS需求4中可以發現到,如果持卡人的資料要跨越公眾網路時需要設定安全的加密傳輸管道。
PCI DSS Requirement 4: Encrypt transmission of cardholder data across open, public networks
You should configure Secure Sockets Layer (SSL) encryption which requires a certificate.
Encrypting Connections to SQL Server
我們使用Windows內建的憑證建立工具Makecert.exe:
假設我們的電腦名稱是SQL16R,建立一個是RSA加密演算法的憑證。
makecert -r -pe -n "CN=SQL16R" -b 01/01/2000 -e 01/01/2036 -eku 1.3.6.1.5.5.7.3.1 -ss my -sr localMachine -sky exchange -sp "Microsoft RSA SChannel Cryptographic Provider" -sy 12
參數:
因為剛剛把憑證儲存到localMachine,所以要啟動local computer certificate Manager
Windows
+ R
+ certlm.msc
啟動local computer certificate
點開憑證 > personal > 選剛剛的SQL16R憑證名稱 > 右鍵ALL Tasks > Manage Private key
設定SQL Server Service執行帳號MSSQLSERVER擁有權限
打開SQL Server Configuration Manager > SQL Server Network Configuration > 右鍵屬性
啟用Force Encryption:YES
選取SQL16R憑證,按下Apply
然後起新啟動SQL Server服務就大功告成了!
將DB的憑證匯出,然後AP安裝憑證就可以和SQL Server建立加密通道連線了!
AP安裝憑證時,記得要將憑證儲存在受信任的根憑證授權單位
.NET程式只要在連線字串後面加上 ;Encrypt=yes
SSMS只要連接時勾選加密就可以了。
我們來測試看看加密通道連線,這邊需要使用到監測封包的軟體,常見的有很多種
這邊我們使用Microsoft Message Analyzer 解析SQL封包
從AP端執行T-SQL指令
SELECT @@VERSION
修改前:
果然錄到SELECT @@VERSION SQL Text
修改後:
我們在資訊安全的機密性(Confidentiality)保護又往前一小步了!
Configuring Certificate for Use by SSL
Encrypting Connections to SQL Server
台灣微軟資安部落格,保哥文章,如何設定 SQL Server 2008 接受 SSL 加密連接 (需設定憑證)
馬德里警車
2014.12攝於普拉多美術館前,Madrid,Spain